<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 题目1，答案：成功了1、成功了2、timeout1、timeout2
        setTimeout(() => {
            console.log('timeout1');
        }, 0);

        setTimeout(() => {
            console.log('timeout2');
        },0);

        Promise.resolve(1).then(
            res=>console.log('成功了1')
        )

        Promise.resolve(2).then(
            res=>console.log('成功了2')
        )

        // 题目2，答案: 成功了1、成功了2、timeout1、成功了3、timeout2。主要难点在于一定要记住我们之前讲的， 每个宏任务在执行之前都会看一下微任务队列里是否有未执行的微任务，如果有则优先执行微任务。所以在这里，第一个定时器里的回调函数执行后，产生了一个微任务，所以当第二个定时器里的回调函数执行前，发现微任务队列里有一个微任务没执行，所以就先执行了这个微任务。这就是第二个定时器“垫底”的原因
        setTimeout(() => {
            console.log('timeout1');
            Promise.resolve(3).then(
                res=>console.log('成功了3')
            )
        }, 0);

        setTimeout(() => {
            console.log('settimeout2');
        }, 0);

        Promise.resolve(1).then(
            res=>console.log('成功了1')
        )

        Promise.resolve(2).then(
            res=>console.log('成功了2')
        )
    </script>
</body>
</html>